package com.moyou.weichat.view.ui;

import android.content.Context;
import android.view.KeyEvent;
import android.widget.EditText;


import com.moyou.weichat.R;
import com.moyou.weichat.dapter.EmoticonsAdapter;
import com.moyou.weichat.dapter.PageSetAdapter;
import com.moyou.weichat.listener.PageViewInstantiateListener;
import com.moyou.weichat.view.ui.filter.EmojiFilter;
import com.moyou.weichat.view.ui.filter.XhsFilter;

import java.io.IOException;
import java.lang.reflect.Constructor;

public class SimpleCommonUtils {
    PageSetAdapter pageSetAdapter;

    public void initEmoticonsEditText(EmoticonsEditText etContent) {
        etContent.addEmoticonFilter(new EmojiFilter());
        etContent.addEmoticonFilter(new XhsFilter());
    }

    public static PageSetAdapter sCommonPageSetAdapter;

    /**
     * 这里添加了记得去Qqutils里面的getCommonAdapter再添加一次
     *
     * @param context
     * @param emoticonClickListener
     * @return
     */
    public PageSetAdapter getCommonAdapter(Context context, EmoticonClickListener emoticonClickListener) {
        if (sCommonPageSetAdapter != null) {
            return sCommonPageSetAdapter;
        }
        pageSetAdapter = new PageSetAdapter();
        addXhsPageSetBQ(pageSetAdapter, context, emoticonClickListener);
     //   addXhsPageSetEntity(pageSetAdapter, context, emoticonClickListener);
        addXhsPageGifSetEntity(pageSetAdapter, context, emoticonClickListener);
        addXhsPageGifXZSetEntity(pageSetAdapter, context, emoticonClickListener);
        return pageSetAdapter;
    }


//    /**
//     * 插入emoji表情集
//     * 更改表情的第一个显示主题
//     *
//     * @param pageSetAdapter
//     * @param context
//     * @param emoticonClickListener
//     */
//    public static void addEmojiPageSetEntity(PageSetAdapter pageSetAdapter, Context context, final EmoticonClickListener emoticonClickListener) {
//        ArrayList<EmojiBean> emojiArray = new ArrayList<>();
//        Collections.addAll(emojiArray, DefEmoticons.sEmojiArray);
//        EmoticonPageSetEntity emojiPageSetEntity
//                = new EmoticonPageSetEntity.Builder()
//                .setLine(3)
//                .setRow(7)
//                .setEmoticonList(emojiArray)
//                .setIPageViewInstantiateItem(getDefaultEmoticonPageViewInstantiateItem(new EmoticonDisplayListener<Object>() {
//                    @Override
//                    public void onBindView(int position, ViewGroup parent, EmoticonsAdapter.ViewHolder viewHolder, Object object, final boolean isDelBtn) {
//                        final EmojiBean emojiBean = (EmojiBean) object;
//                        if (emojiBean == null && !isDelBtn) {
//                            return;
//                        }
//                        viewHolder.ly_root.setBackgroundResource(R.drawable.bg_emoticon);
//
//                        if (isDelBtn) {
//                            viewHolder.iv_emoticon.setImageResource(R.mipmap.icon_del);
//                        } else {
//                            viewHolder.iv_emoticon.setImageResource(emojiBean.icon);
//                        }
//
//                        viewHolder.rootView.setOnClickListener(new View.OnClickListener() {
//                            @Override
//                            public void onClick(View v) {
//                                if (emoticonClickListener != null) {
//                                    emoticonClickListener.onEmoticonClick(emojiBean, Constants.EMOTICON_CLICK_TEXT, isDelBtn);
//                                }
//                            }
//                        });
//                    }
//                }))
//                .setShowDelBtn(EmoticonPageEntity.DelBtnStatus.LAST)
//                .setIconUri(ImageBase.Scheme.DRAWABLE.toUri("ebg"))
//                .build();
//        pageSetAdapter.add(emojiPageSetEntity);
//    }


//    /**
//     * 插入表情
//     *
//     * @param pageSetAdapter
//     * @param context
//     * @param emoticonClickListener
//     */
//    public static void addXhsPageSetEntity(PageSetAdapter pageSetAdapter, Context context, EmoticonClickListener emoticonClickListener) {
//        EmoticonPageSetEntity xhsPageSetEntity
//                = new EmoticonPageSetEntity.Builder()
//                .setLine(3)//列数
//                .setRow(8)//行数
//                .setEmoticonList(ParseDataUtils.ParseXhsData(DefXhsEmoticons.xhsEmoticonArray, ImageBase.Scheme.ASSETS))//图片集合
//                .setIPageViewInstantiateItem(getDefaultEmoticonPageViewInstantiateItem(getCommonEmoticonDisplayListener(emoticonClickListener, Constants.EMOTICON_CLICK_TEXT)))
//                .setShowDelBtn(EmoticonPageEntity.DelBtnStatus.LAST)//显示几
//                .setIconUri(ImageBase.Scheme.ASSETS.toUri("f_static_01.png"))
//                .build();
//        pageSetAdapter.add(xhsPageSetEntity);
//    }

    /**
     * 插入表情
     *
     * @param pageSetAdapter
     * @param context
     * @param emoticonClickListener
     */
    public static void addXhsPageSetBQ(PageSetAdapter pageSetAdapter, Context context, EmoticonClickListener emoticonClickListener) {
        EmoticonPageSetEntity xhsPageSetEntity
                = new EmoticonPageSetEntity.Builder()
                .setLine(3)//列数
                .setRow(8)//行数
                .setEmoticonList(ParseDataUtils.ParseXhsData(DefXhsEmoticons.xhsEmoticonArrayTwo, ImageBase.Scheme.ASSETS))//图片集合
                .setIPageViewInstantiateItem(getDefaultEmoticonPageViewInstantiateItem(getCommonEmoticonDisplayListener(emoticonClickListener, Constants.EMOTICON_CLICK_TEXT)))
                .setShowDelBtn(EmoticonPageEntity.DelBtnStatus.LAST)//显示几
                .setIconUri(ImageBase.Scheme.ASSETS.toUri("m_static_01.png"))
                .build();
        pageSetAdapter.add(xhsPageSetEntity);
    }


    /**
     * 插入小绿动态表情
     *
     * @param pageSetAdapter
     * @param context
     * @param emoticonClickListener
     */
    public static void addXhsPageGifSetEntity(PageSetAdapter pageSetAdapter, Context context, EmoticonClickListener emoticonClickListener) {
        EmoticonPageSetEntity xhsPageSetEntity
                = new EmoticonPageSetEntity.Builder()
                .setLine(2)//列数
                .setRow(4)//行数
                .setEmoticonList(ParseDataUtils.ParseXhsData(DefXhsEmoticons.xhsEmoticonXLArray, ImageBase.Scheme.ASSETS))//图片集合
                .setIPageViewInstantiateItem(getDefaultXLItem(getCommonEmoticonDisplayListener(emoticonClickListener, Constants.EMOTICON_CLICK_BIGIMAGE)))
                .setIconUri(ImageBase.Scheme.ASSETS.toUri("chat_xiaolu_1.png"))
                .build();
        pageSetAdapter.add(xhsPageSetEntity);
    }

    /**
     * 插入小紫动态表情
     *
     * @param pageSetAdapter
     * @param context
     * @param emoticonClickListener
     */
    public static void addXhsPageGifXZSetEntity(PageSetAdapter pageSetAdapter, Context context, EmoticonClickListener emoticonClickListener) {
        EmoticonPageSetEntity xhsPageSetEntity
                = new EmoticonPageSetEntity.Builder()
                .setLine(2)//列数
                .setRow(4)//行数
                .setEmoticonList(ParseDataUtils.ParseXhsData(DefXhsEmoticons.xhsEmoticonXZArray, ImageBase.Scheme.ASSETS))//图片集合
                .setIPageViewInstantiateItem(getDefaultXLItem(getCommonEmoticonDisplayListener(emoticonClickListener, Constants.EMOTICON_CLICK_XL)))
                .setIconUri(ImageBase.Scheme.ASSETS.toUri("ic_xiaozi.png"))
                .build();
        pageSetAdapter.add(xhsPageSetEntity);
    }


//    /**
//     * 测试页集
//     *
//     * @param pageSetAdapter
//     * @param context
//     */
//    public static void addTestPageSetEntity(PageSetAdapter pageSetAdapter, Context context) {
//        PageSetEntity pageSetEntity = new PageSetEntity.Builder()
//                .addPageEntity(new PageEntity(new SimpleQqGridView(context)))
//                .setIconUri(ImageBase.Scheme.DRAWABLE.toUri("icon_kaomoji"))
//                .setShowIndicator(false)
//                .build();
//        pageSetAdapter.add(pageSetEntity);
//    }

    @SuppressWarnings("unchecked")
    public static Object newInstance(Class _Class, Object... args) throws Exception {
        return newInstance(_Class, 0, args);
    }

    @SuppressWarnings("unchecked")
    public static Object newInstance(Class _Class, int constructorIndex, Object... args) throws Exception {
        Constructor cons = _Class.getConstructors()[constructorIndex];
        return cons.newInstance(args);
    }

    //自定义用的
    public static PageViewInstantiateListener<EmoticonPageEntity> getDefaultEmoticonPageViewInstantiateItem(final EmoticonDisplayListener<Object> emoticonDisplayListener) {
        return getEmoticonPageViewInstantiateItem(false, EmoticonsAdapter.class, null, emoticonDisplayListener);
    }

    //gif小绿用的
    public static PageViewInstantiateListener<EmoticonPageEntity> getDefaultXLItem(final EmoticonDisplayListener<Object> emoticonDisplayListener) {
        return getEmoticonPageViewInstantiateItem(true, EmoticonsAdapter.class, null, emoticonDisplayListener);
    }


    public static PageViewInstantiateListener<EmoticonPageEntity> getEmoticonPageViewInstantiateItem(final Class _class, EmoticonClickListener onEmoticonClickListener) {
        return getEmoticonPageViewInstantiateItem(false, _class, onEmoticonClickListener, null);
    }


    public static PageViewInstantiateListener<EmoticonPageEntity> getEmoticonPageViewInstantiateItem(final boolean isGif, final Class _class, final EmoticonClickListener onEmoticonClickListener, final EmoticonDisplayListener<Object> emoticonDisplayListener) {
        return (container, position, pageEntity) -> {
            if (pageEntity.getRootView() == null) {
                EmoticonPageView pageView = new EmoticonPageView(container.getContext());
                pageView.setNumColumns(pageEntity.getRow());
                pageEntity.setRootView(pageView);
                try {
                    EmoticonsAdapter adapter = (EmoticonsAdapter) newInstance(_class, container.getContext(), pageEntity, onEmoticonClickListener);
                    if (isGif) {
                        adapter.setGif(true);
                        adapter.notifyDataSetChanged();
                    }
                    if (emoticonDisplayListener != null) {
                        adapter.setOnDisPlayListener(emoticonDisplayListener);
                    }
                    pageView.getEmoticonsGridView().setAdapter(adapter);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
            return pageEntity.getRootView();
        };
    }

    /**
     * 地鼠
     *
     * @param onEmoticonClickListener
     * @param type
     * @return
     */
    public static EmoticonDisplayListener<Object> getCommonEmoticonDisplayListener(final EmoticonClickListener onEmoticonClickListener, final int type) {
        return (position, parent, viewHolder, object, isDelBtn) -> {

            final EmoticonEntity emoticonEntity = (EmoticonEntity) object;
            if (emoticonEntity == null && !isDelBtn) {
                return;
            }
            viewHolder.ly_root.setBackgroundResource(R.drawable.bg_emoticon);
            if (isDelBtn) {
                viewHolder.iv_emoticon.setImageResource(R.mipmap.icon_del);
            } else {
                try {
                    ImageLoader.getInstance(viewHolder.iv_emoticon.getContext()).displayImage(emoticonEntity.getIconUri(), viewHolder.iv_emoticon);
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }

            viewHolder.rootView.setOnClickListener(v -> {
                if (onEmoticonClickListener != null) {
                    onEmoticonClickListener.onEmoticonClick(emoticonEntity, type, isDelBtn);
                }
            });
        };
    }

    public static void delClick(EditText editText) {
        int action = KeyEvent.ACTION_DOWN;
        int code = KeyEvent.KEYCODE_DEL;
        KeyEvent event = new KeyEvent(action, code);
        editText.onKeyDown(KeyEvent.KEYCODE_DEL, event);
    }


}
